---
title: SAIF.Business.View.Provider operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-21
library: SAIF.Business.View.Provider
reference_type: embedded
---

# SAIF.Business.View.Provider operations and processes

This page is the operation catalog and cross-operation hub for this library. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Retrieve a provider by ID or primary tax ID](operations/retrieve-provider-by-id-or-tax-id.md) | Load a provider aggregate root read-only | Caller request (e.g. location navigation) | `IDataPortalInfo`, provider ID or primary tax ID | `clsProvider` (`ReadOnly = True`) | [BR-PRV-001](business-rules.md#br-prv-001-primary-tax-id-must-be-a-9-digit-number), [BR-PRV-004](business-rules.md#br-prv-004-providers-retrieved-via-factory-methods-are-read-only) | [PROVIDER](database-tables.md#provider) | [SQL-PRV-01](sql/SQL-PRV-01-provider-by-id.md), [SQL-PRV-01b](sql/SQL-PRV-01b-provider-by-tax-id.md) |
| [Retrieve a provider location and its lazily-loaded graph](operations/retrieve-provider-location.md) | Load one provider location and expose lazy navigation properties | Caller request (e.g. `LegalManagerBase.CurrentProviderId`) | `IDataPortalInfo`, provider-location ID | `clsProviderLocation` | [BR-PLOC-001](business-rules.md#br-ploc-001-provider-location-id-must-be-positive), [BR-PLOC-002](business-rules.md#br-ploc-002-provider-id-must-be-positive), [BR-PLOC-003](business-rules.md#br-ploc-003-provider-type-code-must-be-non-empty) | [PROVIDER_LOCATION](database-tables.md#provider_location) | [SQL-PLOC-01](sql/SQL-PLOC-01-provider-location-by-id.md) |
| [Retrieve provider locations by provider or by provider type](operations/retrieve-provider-locations-by-provider-or-type.md) | Load a set of provider locations for a provider or a provider type | `clsProvider.ProviderLocations`; `clsRequestManager.ProviderList` | `IDataPortalInfo`, provider ID or provider type code | `clsProviderLocationCollection` | [BR-PLOC-004](business-rules.md#br-ploc-004-ineligible-locations-are-excluded-from-filtered-lists) | [PROVIDER_LOCATION](database-tables.md#provider_location) | [SQL-PLOC-02](sql/SQL-PLOC-02-locations-by-provider.md), [SQL-PLOC-03](sql/SQL-PLOC-03-locations-by-type.md) |
| [Load and select a provider-location address](operations/load-and-select-provider-address.md) | Load addresses for a location and select the best-available address by type | `clsProviderLocation.Addresses`; payee-address resolution | `IDataPortalInfo`, provider-location ID, optional address type | `clsProviderAddressCollection`, `clsProviderAddress` | [BR-PADR-001](business-rules.md#br-padr-001-addresses-without-expiration-default-to-date-maxvalue) … [BR-PADR-006](business-rules.md#br-padr-006-address-type-codes-are-fixed) | [PROVIDER_ADDRESS](database-tables.md#provider_address) | [SQL-PADR-01](sql/SQL-PADR-01-provider-addresses.md) |
| [Load provider relationships (parents or children)](operations/load-provider-relationships.md) | Load parent or child relationships for a provider location | `clsProviderLocation.ChildRelationships` / `ParentRelationships` | `IDataPortalInfo`, provider-location ID | `clsProviderRelationshipCollection` | [BR-PREL-001](business-rules.md#br-prel-001-works-for-relationships-are-wrk-code) … [BR-PREL-004](business-rules.md#br-prel-004-destination-relationship-type-is-the-opposite-of-the-source) | [PROVIDER_RELATIONSHIP](database-tables.md#provider_relationship) | [SQL-PREL-01](sql/SQL-PREL-01-child-relationships.md), [SQL-PREL-02](sql/SQL-PREL-02-parent-relationships.md) |
| [Load provider ineligibility periods](operations/load-provider-ineligibility-periods.md) | Load ineligibility windows for a location or a single period | `clsProviderLocation.IneligibilityPeriods` | `IDataPortalInfo`, provider-location ID or ineligibility-period ID | `clsProviderIneligibilityPeriodCollection`, `clsProviderIneligibilityPeriod` | [BR-PINE-001](business-rules.md#br-pine-001-ineligibility-periods-without-termination-default-to-date-maxvalue) | [PROVIDER_INELIG_PERIOD](database-tables.md#provider_inelig_period) | [SQL-PINE-01](sql/SQL-PINE-01-ineligibility-period-by-id.md), [SQL-PINE-02](sql/SQL-PINE-02-ineligibility-periods-by-location.md) |
| [Load a provider type / all provider types](operations/load-provider-type.md) | Load one provider type or the full type lookup list | `clsProviderLocation.ProviderType` | `IDataPortalInfo`, provider type code (optional) | `clsProviderType`, `clsProviderTypeCollection` | [BR-PLOC-003](business-rules.md#br-ploc-003-provider-type-code-must-be-non-empty) | [PROVIDER_TYPE_CODE](database-tables.md#provider_type_code) | [SQL-PTYP-01](sql/SQL-PTYP-01-provider-type-by-code.md), [SQL-PTYP-02](sql/SQL-PTYP-02-all-provider-types.md) |
| [Load provider tax IDs](operations/load-provider-tax-ids.md) | Load tax-ID registrations for a provider | `clsProvider.TaxIDs`; `clsProvider.PayeeAddress` | `IDataPortalInfo`, provider sequence number | `clsProviderTaxIDCollection` | [BR-PRV-002](business-rules.md#br-prv-002-payee-address-resolution-order) | [PROVIDER_TAX_ID](database-tables.md#provider_tax_id) | [SQL-PTAX-01](sql/SQL-PTAX-01-provider-tax-ids.md) |
| [Search for provider locations](operations/search-provider-locations.md) | Multi-criteria search across provider locations | Caller populates `SearchCriteria`, invokes `searchForProvider` | `clsSearchCriteria` (name, tax ID, other ID, type, service type, MCO name, business/person, address, phone) | `Providers` (`clsProviders` of `clsSearchResults`) | [BR-SRCH-001](business-rules.md#br-srch-001-at-least-one-search-field-is-required) … [BR-SRCH-008](business-rules.md#br-srch-008-search-text-normalization) | [PROVIDER_LOCATION](database-tables.md#provider_location) | [SQL-SRCH-01](sql/SQL-SRCH-01-provider-search.md) |
| [Load DCBS cost-charge factors](operations/load-dcbs-cost-charge-factors.md) | Load DCBS cost-to-charge factors for a location | `clsProviderLocation.DCBSCostCharges` | `IDataPortalInfo`, provider-location ID | `clsDCBSCostChargeList` | [BR-DATE-001](business-rules.md#br-date-001-dated-records-are-in-effect-within-their-date-window) | [PROVIDER_DCBS_COST_CHARGE](database-tables.md#provider_dcbs_cost_charge) | [SQL-DCBS-01](sql/SQL-DCBS-01-dcbs-cost-charges.md) |
| [Load MCO enrollments](operations/load-mco-enrollments.md) | Load MCO plan enrollments for a location | `clsProviderLocation.MCOList` | `IDataPortalInfo`, provider-location ID | `clsMCOProviderList` | [BR-MCO-001](business-rules.md#br-mco-001-mco-plan-must-match-the-assigned-plan-id), [BR-DATE-001](business-rules.md#br-date-001-dated-records-are-in-effect-within-their-date-window) | [MCO_PROVIDER](database-tables.md#mco_provider) | [SQL-MCO-01](sql/SQL-MCO-01-mco-provider-plans.md) |
| [Load provider services and service contracts](operations/load-provider-services-and-contracts.md) | Load service-code assignments and service contracts for a location | `clsProviderLocation.Services` / `ServiceContracts` | `IDataPortalInfo`, provider-location ID, optional offset (default 721 days) | `clsProviderServiceList`, `clsProviderServiceContractList` | [BR-PSVC-001](business-rules.md#br-psvc-001-service-contracts-are-limited-to-the-offset-window), [BR-MCO-001](business-rules.md#br-mco-001-mco-plan-must-match-the-assigned-plan-id) | [PROVIDER_SERVICE](database-tables.md#provider_service), [PROVIDER_SERVICE_CONTRACT](database-tables.md#provider_service_contract) | [SQL-PSVC-01](sql/SQL-PSVC-01-provider-services.md), [SQL-PSVC-02](sql/SQL-PSVC-02-provider-service-contracts.md) |
| [Retrieve a set of providers](operations/retrieve-provider-set.md) | Load a set of providers by tax-ID list or a caller-supplied WHERE clause | `GetProviderCollection` / `GetProvidersUsingWhere` | `IDataPortalInfo`, tax-ID array or WHERE clause string | `clsProviderCollection` | [BR-PRV-003](business-rules.md#br-prv-003-provider-set-retrieval-uses-unparameterized-sql) | [PROVIDER](database-tables.md#provider) | [SQL-PRV-02](sql/SQL-PRV-02-provider-collection-by-taxid.md), [SQL-PRV-02b](sql/SQL-PRV-02b-provider-collection-by-where.md) |

## Process flow diagram
The following diagram visualizes the general retrieval flow across the portal/criteria path, the direct-query path, and the search engine.

```mermaid
flowchart TD
	Start([Caller request]) --> Kind{Which access style?}
	Kind -->|Portal/criteria object| Criteria[Build Criteria<br>e.g. clsProvider.GetProvider]
	Criteria --> Portal[IDataPortalInfo.DataAccessLayer.RetrieveObject]
	Portal --> Before[BeforeRetrieve<br>bind parameters]
	Before --> After[AfterRetrieve<br>Fill / MarkOld]
	After --> Result1([Business object returned])
	Kind -->|Direct-query list| Ctor[List constructor<br>e.g. clsDCBSCostChargeList]
	Ctor --> Helper[SqlHelper.ResultSetQuery]
	Helper --> Materialize[Materialize rows into list]
	Materialize --> Result2([Self-loaded list returned])
	Kind -->|Search| SearchCriteria[clsSearchCriteria populated]
	SearchCriteria --> SearchExec[searchForProvider<br>dynamic SQL, up to 13 binds]
	SearchExec --> Cap{Rows > 299?}
	Cap -->|Yes| Truncate(["Stop loading, discard<br>remainder"])
	Cap -->|No| Result3(["Providers / clsSearchResults<br>returned"])
```

## Database interactions

The following table summarizes which operations read from or write to the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Retrieve a provider by ID or primary tax ID](operations/retrieve-provider-by-id-or-tax-id.md) | [SQL-PRV-01](sql/SQL-PRV-01-provider-by-id.md), [SQL-PRV-01b](sql/SQL-PRV-01b-provider-by-tax-id.md) | [PROVIDER](database-tables.md#provider), [PROVIDER_TAX_ID](database-tables.md#provider_tax_id) | Read |
| [Retrieve a provider location and its lazily-loaded graph](operations/retrieve-provider-location.md) | [SQL-PLOC-01](sql/SQL-PLOC-01-provider-location-by-id.md) | [PROVIDER_LOCATION](database-tables.md#provider_location) | Read |
| [Retrieve provider locations by provider or by provider type](operations/retrieve-provider-locations-by-provider-or-type.md) | [SQL-PLOC-02](sql/SQL-PLOC-02-locations-by-provider.md), [SQL-PLOC-03](sql/SQL-PLOC-03-locations-by-type.md) | [PROVIDER_LOCATION](database-tables.md#provider_location) | Read |
| [Load and select a provider-location address](operations/load-and-select-provider-address.md) | [SQL-PADR-01](sql/SQL-PADR-01-provider-addresses.md) | [PROVIDER_LOCATION](database-tables.md#provider_location), [PROVIDER_ADDRESS](database-tables.md#provider_address) | Read |
| [Load provider relationships (parents or children)](operations/load-provider-relationships.md) | [SQL-PREL-01](sql/SQL-PREL-01-child-relationships.md), [SQL-PREL-02](sql/SQL-PREL-02-parent-relationships.md) | [PROVIDER_LOCATION](database-tables.md#provider_location), [PROVIDER_RELATIONSHIP](database-tables.md#provider_relationship) | Read |
| [Load provider ineligibility periods](operations/load-provider-ineligibility-periods.md) | [SQL-PINE-01](sql/SQL-PINE-01-ineligibility-period-by-id.md), [SQL-PINE-02](sql/SQL-PINE-02-ineligibility-periods-by-location.md) | [PROVIDER_INELIG_PERIOD](database-tables.md#provider_inelig_period) | Read |
| [Load a provider type / all provider types](operations/load-provider-type.md) | [SQL-PTYP-01](sql/SQL-PTYP-01-provider-type-by-code.md), [SQL-PTYP-02](sql/SQL-PTYP-02-all-provider-types.md) | [PROVIDER_TYPE_CODE](database-tables.md#provider_type_code) | Read |
| [Load provider tax IDs](operations/load-provider-tax-ids.md) | [SQL-PTAX-01](sql/SQL-PTAX-01-provider-tax-ids.md) | [PROVIDER_TAX_ID](database-tables.md#provider_tax_id) | Read |
| [Search for provider locations](operations/search-provider-locations.md) | [SQL-SRCH-01](sql/SQL-SRCH-01-provider-search.md) | [PROVIDER_LOCATION](database-tables.md#provider_location), [PROVIDER_TYPE_CODE](database-tables.md#provider_type_code), [PROVIDER_ADDRESS](database-tables.md#provider_address), [PROVIDER_TAX_ID](database-tables.md#provider_tax_id), [PROVIDER_IDENTITY](database-tables.md#provider_identity), [PROVIDER_SERVICE](database-tables.md#provider_service), [MCO_PROVIDER](database-tables.md#mco_provider) | Read |
| [Load DCBS cost-charge factors](operations/load-dcbs-cost-charge-factors.md) | [SQL-DCBS-01](sql/SQL-DCBS-01-dcbs-cost-charges.md) | [PROVIDER_DCBS_COST_CHARGE](database-tables.md#provider_dcbs_cost_charge) | Read |
| [Load MCO enrollments](operations/load-mco-enrollments.md) | [SQL-MCO-01](sql/SQL-MCO-01-mco-provider-plans.md) | [MCO_PROVIDER](database-tables.md#mco_provider) | Read |
| [Load provider services and service contracts](operations/load-provider-services-and-contracts.md) | [SQL-PSVC-01](sql/SQL-PSVC-01-provider-services.md), [SQL-PSVC-02](sql/SQL-PSVC-02-provider-service-contracts.md) | [PROVIDER_SERVICE](database-tables.md#provider_service), [PROVIDER_SERVICE_CODE](database-tables.md#provider_service_code), [PROVIDER_SERVICE_CONTRACT](database-tables.md#provider_service_contract) | Read |
| [Retrieve a set of providers](operations/retrieve-provider-set.md) | [SQL-PRV-02](sql/SQL-PRV-02-provider-collection-by-taxid.md), [SQL-PRV-02b](sql/SQL-PRV-02b-provider-collection-by-where.md) | [PROVIDER](database-tables.md#provider), [PROVIDER_TAX_ID](database-tables.md#provider_tax_id) | Read |

## Failure and edge-case behavior
- No rows returned by a single-object retrieval (e.g. `SQL-PRV-01`, `SQL-PLOC-01`): the object keeps default field values (e.g. `ProviderID = 0`), which downstream rule checks such as [BR-PLOC-002](business-rules.md#br-ploc-002-provider-id-must-be-positive) then detect as invalid.
- Provider search ([SQL-SRCH-01](sql/SQL-SRCH-01-provider-search.md)) silently stops loading once results exceed 299 rows ([BR-SRCH-007](business-rules.md#br-srch-007-search-results-capped-at-300-rows)); no truncation warning reaches the caller.
- `clsProviderCollection.Criteria.BuildSQLWhere` concatenates a tax-ID list or a caller-supplied WHERE clause directly into SQL text with no bind variables ([SQL-PRV-02](sql/SQL-PRV-02-provider-collection-by-taxid.md), [SQL-PRV-02b](sql/SQL-PRV-02b-provider-collection-by-where.md)) — an unbound WHERE clause is a SQL-injection risk if a caller passes untrusted input ([BR-PRV-003](business-rules.md#br-prv-003-provider-set-retrieval-uses-unparameterized-sql)).
- `clsProviderRelationship.Criteria` throws `InvalidSQLProperty` on all five SQL properties, so a single relationship can never be retrieved directly through the portal.**
- `SetPlan` throws `ApplicationException` when an MCO plan ID does not match the plan already assigned to an enrollment or service contract ([BR-MCO-001](business-rules.md#br-mco-001-mco-plan-must-match-the-assigned-plan-id)).

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- `SAIF.Business.View.Provider/clsProvider.vb`
- `SAIF.Business.View.Provider/clsProviderCollection.vb`
- `SAIF.Business.View.Provider/clsProviderLocation.vb`
- `SAIF.Business.View.Provider/clsProviderLocationCollection.vb`
- `SAIF.Business.View.Provider/clsProviderAddress.vb`
- `SAIF.Business.View.Provider/clsProviderAddressCollection.vb`
- `SAIF.Business.View.Provider/clsProviderRelationship.vb`
- `SAIF.Business.View.Provider/clsProviderRelationshipCollection.vb`
- `SAIF.Business.View.Provider/clsProviderIneligibilityPeriod.vb`
- `SAIF.Business.View.Provider/clsProviderIneligibilityPeriodCollection.vb`
- `SAIF.Business.View.Provider/clsProviderTaxID.vb`
- `SAIF.Business.View.Provider/clsProviderTaxIDCollection.vb`
- `SAIF.Business.View.Provider/clsProviderType.vb`
- `SAIF.Business.View.Provider/clsProviderTypeCollection.vb`
- `SAIF.Business.View.Provider/clsProviderSearch.vb`
- `SAIF.Business.View.Provider/clsDCBSCostCharge.vb`
- `SAIF.Business.View.Provider/clsMCOProvider.vb`
- `SAIF.Business.View.Provider/clsProviderServices.vb`
- `SAIF.Business.View.Provider/clsProviderServiceContract.vb`
